//
// Created by pc on 2022/5/23.
//

#ifndef EX5_VEC4_H
#define EX5_VEC4_H

#include <iostream>
#include "Complex.h"
using namespace std;

class Vec4 {
private:
    float v1;
    float v2;
    float v3;
    float v4;
public:
    Vec4() = default;
    Vec4(const Vec4&) = default;
    Vec4(const float *, int len = 4);

    friend ostream & operator<<(ostream &os, Vec4& vec);
    friend istream & operator>>(istream &in, Vec4& vec);



    Vec4 & operator+=(Vec4 other);
    //Vec4 & operator+=(const Complex& other);
    Vec4 & operator-=(const Vec4& other);
    float operator*=(const Vec4& other);
    float operator/=(const Vec4& other);

    Vec4& operator-();

    explicit operator float*() const;

    float& operator[](int);

    float getV1() const;

    void setV1(float v1);

    float getV2() const;

    void setV2(float v2);

    float getV3() const;

    void setV3(float v3);

    float getV4() const;

    void setV4(float v4);
};
//重载这种a+b的运算时，要返回值而不是引用，因为这不改变a和b
Vec4 operator+(const Vec4 &v1, const Vec4 &v2);
Vec4 operator-(const Vec4 &v1, const Vec4 &v2);
float operator*(const Vec4 &v1, const Vec4 &v2);
float operator/(const Vec4 &v1, const Vec4 &v2);


#endif //EX5_VEC4_H
